class Queue<E> {
    private Object[] array;
    private int len;      // 数组总长度（实际存储空间为len-1）
    private int front;    // 队头指针
    private int rear;     // 队尾指针
    private int size;     // 当前元素个数

    public Queue() {
        this(9); // 初始化8个存储空间
    }
    public Queue(int len) {
        this.len = len + 1; // 实际数组长度为存储空间+1
        array = new Object[this.len];
        front = rear = 0;
    }
    public int getSize() {
        return size;
    }
    // 入队操作（带数据校验）
    public boolean enQueue(E e) {
        if (isFull()) {
            System.out.println("警告：数据'" + e + "'无法入队，队列已满！");
            return false;
        }
        array[rear] = e;
        rear = (rear + 1) % len;
        size++;
        return true;
    }
    // 出队操作
    public E deQueue() {
        if (isEmpty()) return null;
        E e = (E) array[front];
        front = (front + 1) % len;
        size--;
        return e;
    }
    // 判空
    public boolean isEmpty() {
        return size == 0;
    }
    // 判满（保留一个位置）
    public boolean isFull() {
        return size == len - 1;
    }
    // 获取队头元素
    public E getHead() {
        return isEmpty() ? null : (E) array[front];
    }
    // 遍历打印队列元素
    public void printQueue() {
        if (isEmpty()) {
            System.out.println("队列为空");
            return;
        }
        System.out.print("当前队列元素：");
        int index = front;
        for (int i = 0; i < size; i++) {
            System.out.print(array[index] + " ");
            index = (index + 1) % len;
        }
        System.out.println();
    }
}
 class Demo {
    public static void main(String[] args) {
        Queue<Integer> queue = new Queue();

        // 1. 入队12,23,34,45,56
        System.out.println("入队12,23,34,45,56：");
        enqueueData(queue, 12, 23, 34, 45, 56);
        queue.printQueue();

        // 2. 尝试入队67,78,89,100
        System.out.println("\n尝试入队67,78,89,100：");
        enqueueData(queue, 67, 78, 89, 100);
        queue.printQueue();

        // 3. 出队前4个元素
        System.out.println("\n出队前4个元素：");
        for (int i = 0; i < 4; i++) {
            Integer e = queue.deQueue();
            System.out.println("出队元素：" + e);
        }
        queue.printQueue();

        // 4. 打印剩余元素
        System.out.println("\n最终剩余元素：");
        queue.printQueue();
    }

    private static void enqueueData(Queue<Integer> queue, Integer... data) {
        for (Integer num : data) {
            if (!queue.enQueue(num)) break;
        }
    }
}